From: Marina Zhurakhinskaya Date: Sat, 5 Feb 2011 00:13:10 +0000 (-0500) Subject: Only animate the message tray items on a hover of a new item or when the tray is... X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~1013^2^2~9104 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=5437a3be4b4c95fd0e6172b70450e9b169973275;p=gnome-shell.git Only animate the message tray items on a hover of a new item or when the tray is left This makes the animation feel more stable and keeps the left-most item expanded when you move the mouse to the left in the tray. The following behavior details are implemented by this patch: - we wait to collapse an expanded item till after the tray is hidden if we are hiding the tray - we don't collapse an expanded item if the summary notification associated with it is being shown, unless a different summary item is hovered over - we don't consider the mouse hovering over a summary notification as hovering over the tray, which allows us to collapse an expanded summary item if it is not associated with the summary notification being shown https://bugzilla.gnome.org/show_bug.cgi?id=636930 --- diff --git a/js/ui/messageTray.js b/js/ui/messageTray.js index aa1bdd13f..47b8294bd 100644 --- a/js/ui/messageTray.js +++ b/js/ui/messageTray.js @@ -1222,26 +1222,29 @@ MessageTray.prototype = { }, _onSummaryItemHoverChanged: function(summaryItem) { + if (summaryItem.actor.hover) + this._setExpandedSummaryItem(summaryItem); + }, + + _setExpandedSummaryItem: function(summaryItem) { + if (summaryItem == this._expandedSummaryItem) + return; + // We can't just animate individual summary items as the // pointer moves in and out of them, because if they don't // move in sync you get weird-looking wobbling. So whenever // there's a change, we have to re-tween the entire summary // area. - if (summaryItem.actor.hover) { - if (summaryItem == this._expandedSummaryItem) - return; - - this._expandedSummaryItem = summaryItem; - } else { - if (summaryItem != this._expandedSummaryItem) - return; - - this._expandedSummaryItem = null; + // Turn off ellipsization for the previously expanded item that is + // collapsing and for the item that is expanding because it looks + // better that way. + if (this._expandedSummaryItem) + this._expandedSummaryItem.setEllipsization(Pango.EllipsizeMode.NONE); - // Turn off ellipsization while collapsing; it looks better - summaryItem.setEllipsization(Pango.EllipsizeMode.NONE); - } + this._expandedSummaryItem = summaryItem; + if (this._expandedSummaryItem) + this._expandedSummaryItem.setEllipsization(Pango.EllipsizeMode.NONE); // We tween on a "_expandedSummaryItemTitleWidth" pseudo-property // that represents the current title width of the @@ -1332,6 +1335,13 @@ MessageTray.prototype = { if (this._useLongerTrayLeftTimeout && !this._trayLeftTimeoutId) return; + // Don't do anything if the mouse is over the summary notification as this should be considered as + // leaving the tray. The tray is locked when the summary notification is visible anyway, but we + // should treat the mouse being over the summary notification as the tray being left for collapsing + // any expanded summary item other than the one related to the notification. + if (this._summaryNotificationBoxPointer.bin.hover) + return; + this._useLongerTrayLeftTimeout = false; if (this._trayLeftTimeoutId) { Mainloop.source_remove(this._trayLeftTimeoutId); @@ -1433,6 +1443,9 @@ MessageTray.prototype = { // Summary let summarySummoned = this._pointerInSummary || this._overviewVisible; let summaryPinned = this._summaryTimeoutId != 0 || this._pointerInTray || summarySummoned || this._locked; + let summaryHovered = this._pointerInTray || this._pointerInSummary; + let summaryVisibleWithNoHover = (this._overviewVisible || this._locked) && !summaryHovered; + let summaryNotificationIsForExpandedSummaryItem = (this._clickedSummaryItem == this._expandedSummaryItem); let notificationsVisible = (this._notificationState == State.SHOWING || this._notificationState == State.SHOWN); @@ -1446,6 +1459,12 @@ MessageTray.prototype = { } else if (this._summaryState == State.SHOWN) { if (!summaryPinned) this._hideSummary(); + else if (summaryVisibleWithNoHover && !summaryNotificationIsForExpandedSummaryItem) + // If we are hiding the summary, we'll collapse the expanded summary item when we are done + // so that there is no animation. However, we should collapse the expanded summary item + // if the summary is visible, but not hovered over, and the summary notification for the + // expanded summary item is not being shown. + this._setExpandedSummaryItem(null); } // Summary notification @@ -1707,11 +1726,18 @@ MessageTray.prototype = { this._tween(this._summaryBin, '_summaryState', State.HIDDEN, { opacity: 0, time: ANIMATION_TIME, - transition: 'easeOutQuad' + transition: 'easeOutQuad', + onComplete: this._hideSummaryCompleted, + onCompleteScope: this, }); this._newSummaryItems = []; }, + _hideSummaryCompleted: function() { + this._expandedSummaryItem = null; + this._expandedSummaryItemTitleWidth = this._summaryItemTitleWidth; + }, + _showSummaryNotification: function() { this._summaryNotification = this._clickedSummaryItem.source.notification; this._summaryNotificationClickedId = this._summaryNotification.connect('done-displaying',